// Symbol

let s1 = Symbol();
let s2 = Symbol();
console.log(s1);
console.log(s2);
console.log(s1 === s2); // false

let s3 = Symbol("foo");
let s4 = Symbol("foo");
console.log(s3);
console.log(s4);
console.log(s3 === s4); // false

// Symbol.for() 不会每次调用就返回一个新的 Symbol 类型的值，而是会先检查给定的 key 是否已经存在，如果不存在才会新建一个值。
let s5 = Symbol.for('foo');
let s6 = Symbol.for('bar');
console.log(s5 === s6) // false

let s7 = Symbol.for(1);
let s8 = Symbol.for(1);
console.log(s7 === s8) // true

// Symbol.keyFor() 

// Symbol.keyFor() 方法返回一个已登记的 Symbol 类型值的 key。
const s9 = Symbol.for('hello');
console.log(Symbol.keyFor(s9)); // hello

const s10 = Symbol('hello');
console.log(Symbol.keyFor(s10)); // undefined

// 作为属性名

let obj = {
    a: 1,
    b: 2,
    c: 3,
    a: 4
};

console.log(obj);

let a1 = Symbol(1);
let a2 = Symbol(4);

let obj2 = {
    [a1]: 1,
    b: 2,
    c: 3,
    [a2]: 4
};

console.log(obj2);
console.log(obj2[a1]);
console.log(obj2[a2]);
